package com.cachopoid.activity;

import java.util.ArrayList;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnCancelListener;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.SlidingDrawer;
import android.widget.Toast;
import android.widget.SlidingDrawer.OnDrawerCloseListener;
import android.widget.SlidingDrawer.OnDrawerOpenListener;
import android.widget.TextView;
import android.graphics.Color;

import com.cachopoid.R;
import com.cachopoid.db.CachopoDAO;
import com.cachopoid.db.EstablecimientoDAO;
import com.cachopoid.utils.CachopoBaseAdapter;
import com.cachopoid.utils.Constantes;
import com.cachopoid.utils.ConstantesDB;
import com.cachopoid.utils.EstablecimientoBaseAdapter;
import com.cachopoid.utils.Utils;
import com.cachopoid.vo.CachopoVO;
import com.cachopoid.vo.EstablecimientoVO;

public class ListaActivity extends Activity {
	
	EstablecimientoDAO establecimientoDao = new EstablecimientoDAO(this);
	CachopoDAO cachopoDAO = new CachopoDAO(this); 
	ArrayList<EstablecimientoVO> listaEstablecimientosGlobal;
	ArrayList<CachopoVO> listaCachoposGlobal;
	TextView tipoDeOrden = null;
	ImageView tab = null;
	FrameLayout layoutSliderMenu = null;
	private ProgressBar pbarProgreso;
    private threadCargaEstablecimientos tarea1;
    ListView listView;
    
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_lista);
		tipoDeOrden = (TextView)findViewById(R.id.tipoOrden);
		final Button BtnBuscarCachopo = (Button)findViewById(R.id.BtnbuscarPorCachopo);
		final Button BtnOrdenarCachopoMasValorado = (Button)findViewById(R.id.BtnOrdenarCachopoMasValor);
		final Button BtnOrdenarCachopoPrecio = (Button)findViewById(R.id.BtnOrdenarCachopoPrecio);
		final Button BtnOrdenarEstablecimiento = (Button)findViewById(R.id.BtnOrdenarEstablecimiento);
		final Button BtnOrdenarCachopoTamanio = (Button)findViewById(R.id.BtnOrdenarCachopoTamanio);
		final TextView editTextOrdenarEstabCiudad = (TextView)findViewById(R.id.EditTextOrdenarEstabCiudad);
		final FrameLayout layoutSliderCachopo = (FrameLayout) findViewById(R.id.layoutMenuScrollCachopo);
		final FrameLayout layoutSliderEstablecimiento = (FrameLayout) findViewById(R.id.layoutMenuScrollEstablecimiento);
		layoutSliderMenu = (FrameLayout) findViewById(R.id.LayoutmenuScroll);
		final SlidingDrawer slidingDrawer = (SlidingDrawer)findViewById(R.id.draw);
		tab = (ImageView)findViewById(R.id.tab);
		pbarProgreso = (ProgressBar) findViewById(R.id.pbarProgreso);
		listView = (ListView) findViewById(R.id.listaRanking);

		tipoDeOrden.setText(Constantes.ESTABLECIMIENTO_ORDEN+" "+ConstantesDB.NOMBRE_ESTABLECIMIENTO);
		//Cambia el tab al estar abierto el menu
		slidingDrawer.setOnDrawerOpenListener(new OnDrawerOpenListener() {
			
			@Override
			public void onDrawerOpened() {
				
				tab.setImageResource(R.drawable.tab_close);
			}
		});
		
		//Cambia el tab al estar cerrado el menu
		slidingDrawer.setOnDrawerCloseListener(new OnDrawerCloseListener() {
			
			@Override
			public void onDrawerClosed() {

				tab.setImageResource(R.drawable.tab_open);						
			}
		});
		
		tarea1 = new threadCargaEstablecimientos();
		tarea1.execute();

		listView.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> a, View v, int position, long id) {
				
				Object objeto = listView.getItemAtPosition(position);
				
				//Si es el ranking de cachopos se recupera el establecimiento para mostrar su detalle
				EstablecimientoVO establecimientoVO = new EstablecimientoVO();
				CachopoVO cachopoVO = new CachopoVO();
				if(objeto.getClass().isInstance(cachopoVO)){
					cachopoVO = (CachopoVO)objeto;					
					establecimientoVO.setIdEstablecimiento(cachopoVO.getIdEstablecimiento());
					objeto=Utils.devuelveElEstablecXCachopo(listaEstablecimientosGlobal,listaCachoposGlobal,establecimientoVO,position);
				}

				Bundle bundle = new Bundle();
				EstablecimientoVO establecimiento = (EstablecimientoVO)objeto;
				Intent intent = new Intent(ListaActivity.this,DetalleActivity.class);
				
				intent.putExtra("com.cachopoid.vo.EstablecimientoVO", establecimiento);

				if(objeto.getClass().isInstance(cachopoVO)){
					intent.putExtra("com.cachopoid.vo.CachopoVO", cachopoVO);
				
				}
					
				intent.putExtras(bundle);

				startActivity(intent);
			} 
		});
		
		/* CLICK DE LOS ITEMS DEL MENU SCROLL*/
		
		
		//Al pulsar en buscar cachopo
		BtnBuscarCachopo.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				if(layoutSliderCachopo.getVisibility()==View.VISIBLE){
					layoutSliderCachopo.setVisibility(View.INVISIBLE);
				}
				else{
					layoutSliderCachopo.setVisibility(View.VISIBLE);
					layoutSliderEstablecimiento.setVisibility(View.INVISIBLE);
				}
			}
		});
		
		//Al pulsar en la opcion buscar cachopo mas valorado
		BtnOrdenarCachopoMasValorado.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				listCachopoMasValorado();
				
				if(layoutSliderCachopo.getVisibility()==View.GONE){
					layoutSliderCachopo.setVisibility(View.GONE);
				}
				else{
					layoutSliderCachopo.setVisibility(View.VISIBLE);
				}
				slidingDrawer.close();
				layoutSliderCachopo.setVisibility(View.GONE);
				tipoDeOrden.setText(Constantes.CACHOPO_MAS_VALORADO);
			}
		});
		

		BtnOrdenarCachopoPrecio.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				listCachopoMasValoradoXPrecio();
				if(layoutSliderCachopo.getVisibility()==View.GONE){
					layoutSliderCachopo.setVisibility(View.VISIBLE);
				}
				else{
					layoutSliderCachopo.setVisibility(View.GONE);
				}
				slidingDrawer.close();
				layoutSliderCachopo.setVisibility(View.GONE);
				tipoDeOrden.setText(Constantes.CACHOPO_MAS_VALORADOXPRECIO);

			}
		});
		
		

		BtnOrdenarCachopoTamanio.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				listCachopoMasValoradoXTamanio();
				if(layoutSliderCachopo.getVisibility()==View.GONE){
					layoutSliderCachopo.setVisibility(View.VISIBLE);
				}
				else{
					layoutSliderCachopo.setVisibility(View.GONE);
				}
				slidingDrawer.close();
				layoutSliderCachopo.setVisibility(View.GONE);
				tipoDeOrden.setText(Constantes.CACHOPO_MAS_VALORADOXTAMANIO);
				
			}
		});
	
	
		//Al pulsar establecimiento  
		BtnOrdenarEstablecimiento.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				if(layoutSliderEstablecimiento.getVisibility()==View.GONE){
					layoutSliderEstablecimiento.setVisibility(View.VISIBLE);
				}
				else{
					layoutSliderEstablecimiento.setVisibility(View.VISIBLE);
					layoutSliderCachopo.setVisibility(View.GONE);
				}
			}
		});
	
	
		editTextOrdenarEstabCiudad.setOnClickListener(new View.OnClickListener() {
		
		@Override
		public void onClick(View v) {
			
			listaEstablecimientosXciudad(editTextOrdenarEstabCiudad.getText().toString());
			if(layoutSliderEstablecimiento.getVisibility()==View.GONE){
				layoutSliderEstablecimiento.setVisibility(View.VISIBLE);
			}
			else{
				layoutSliderEstablecimiento.setVisibility(View.VISIBLE);
				layoutSliderCachopo.setVisibility(View.GONE);
			}
			slidingDrawer.close();
			layoutSliderEstablecimiento.setVisibility(View.GONE);
			tipoDeOrden.setText(Constantes.CACHOPO_MAS_VALORADO);
		}
	});
	}
	
	public boolean onCreateOptionsMenu(Menu menu) {
	    MenuInflater inflater = getMenuInflater();
	    inflater.inflate(R.menu.activity_detalle_menu, menu);
	    return true;
	}
	
	public boolean onOptionsItemSelected(MenuItem item) {
	    switch (item.getItemId()) {
	    
	       /*Menu Ordenar por Establecimientos*/
	    
	    	case R.id.SubMenuOpcNumVotos:
	    		listaEstablecimientos("");
            return true;
            
	    	case R.id.SubMenuOpcOrdAlfabet:
	    		listaEstablecimientos(ConstantesDB.NOMBRE_ESTABLECIMIENTO);
	    	return true;
            
	    	case R.id.SubMenuOpcOrdCiudad:
	    		listaEstablecimientos(ConstantesDB.CIUDAD);
	    	return true;
	    	case R.id.SubMenuOpcPrecio:
	    		listaEstablecimientos("");
            return true;
            
	    	case R.id.SubMenuOpcTamanio:
	    		listaEstablecimientos("");
            return true;
            
            
            /*Menu Ordenar por Cachopos*/
            	
	    	case R.id.SubMenuOpcCachopoMasValorado:
	    		listCachopoMasValorado();
            return true;
	        case R.id.menuSalir:
	            this.finish();
	            return true;
	        default:
	            return super.onOptionsItemSelected(item);
	    }
	}
	
	//Metodos de cachopos
	
	public void listCachopoMasValorado(){
		ArrayList<CachopoVO> listaResultado = cachopoDAO.listMasValorado();
		listaCachoposGlobal=listaResultado;
		final ListView listView = (ListView) findViewById(R.id.listaRanking);
		listView.setAdapter(new CachopoBaseAdapter(this, listaResultado, listaEstablecimientosGlobal));
		tipoDeOrden.setText(Constantes.CACHOPO_MAS_VALORADO);
	}
	
	public void listCachopoMasValoradoXPrecio(){
		ArrayList<CachopoVO> listaResultado = cachopoDAO.listAll(ConstantesDB.PRECIO);
		listaCachoposGlobal=listaResultado;
		final ListView listView = (ListView) findViewById(R.id.listaRanking);
		listView.setAdapter(new CachopoBaseAdapter(this, listaResultado, listaEstablecimientosGlobal));
		tipoDeOrden.setText(Constantes.CACHOPO_MAS_VALORADOXPRECIO);
	}
	
	public void listCachopoMasValoradoXTamanio(){
		ArrayList<CachopoVO> listaResultado = cachopoDAO.listAll(ConstantesDB.TAMANIO);
		listaCachoposGlobal=listaResultado;
		final ListView listView = (ListView) findViewById(R.id.listaRanking);
		listView.setAdapter(new CachopoBaseAdapter(this, listaResultado, listaEstablecimientosGlobal));
		tipoDeOrden.setText(Constantes.CACHOPO_MAS_VALORADOXTAMANIO);
	}
	
	
	
	//Metodos de establecimientos
	

	public void listaEstablecimientos(String orderBy){
		tipoDeOrden.setText(Constantes.ESTABLECIMIENTO_ORDEN+" "+orderBy);
		ArrayList<EstablecimientoVO> listaResultado = establecimientoDao.listAll(orderBy);	
		final ListView listView = (ListView) findViewById(R.id.listaRanking);
		listView.setAdapter(new EstablecimientoBaseAdapter(this, listaResultado));
	}
	
	
	public void listaEstablecimientosXciudad(String ciudad){
		tipoDeOrden.setText(Constantes.ESTABLECIMIENTO_ORDEN+" "+ciudad);
		ArrayList<EstablecimientoVO> listaResultado = establecimientoDao.getEstablecimientoXciudad(ciudad);	
		final ListView listView = (ListView) findViewById(R.id.listaRanking);
		listView.setAdapter(new EstablecimientoBaseAdapter(this, listaResultado));
	}
	
	
private class threadCargaEstablecimientos extends AsyncTask<Void, Integer, Boolean> {
    	
    	@Override
    	protected Boolean doInBackground(Void... params) {

    		 listaEstablecimientosGlobal = establecimientoDao.listAll(ConstantesDB.NOMBRE_ESTABLECIMIENTO);

    		return true;
    	}
    	
    	@Override
    	protected void onProgressUpdate(Integer... values) {
    		// int progreso = values[0].intValue();
    		// pbarProgreso.setProgress(progreso);
    	}
    	
    	@Override
    	protected void onPreExecute() {
    		pbarProgreso.setMax(100);
    		pbarProgreso.setProgress(0);
    	}
    	
    	@Override
    	protected void onPostExecute(Boolean result) {
    		if(result){
    			Toast.makeText(ListaActivity.this, "Carga finalizada!", Toast.LENGTH_SHORT).show();
    			pbarProgreso.setVisibility(View.INVISIBLE);
    			listView.setAdapter(new EstablecimientoBaseAdapter(ListaActivity.this, listaEstablecimientosGlobal));
    		}
    	}
    	
    	@Override
    	protected void onCancelled() {
    		Toast.makeText(ListaActivity.this, "Carga cancelada!", Toast.LENGTH_SHORT).show();
    	}
    }
    
    
	

}
